﻿using System;

namespace MoroMoro.Samples.ToDoList.Base.Domain.Builders
{
    /// <summary>
    /// エンティティビルダを表します。
    /// </summary>
    /// <remarks>
    /// <para>
    /// エンティティビルダの実装方法の詳細については <see cref="EntityBuilder&lt;TEntity, TErrorHandler, TConstraintValidator&gt;"/> クラスを参照してください。
    /// </para>
    /// </remarks>
    /// <typeparam name="TEntity">エンティティの型。</typeparam>
    public interface IEntityBuilder<TEntity>
        where TEntity : class
    {
        /// <summary>
        /// ビルドを実行できる状態であるかどうかを示す値を取得します。
        /// </summary>
        /// <returns>ビルドを実行できる状態である場合は true、それ以外は false。</returns>
        bool IsValid
        {
            get;
        }

        /// <summary>
        /// エンティティをビルドします。
        /// </summary>
        /// <returns>ビルドされたエンティティ。</returns>
        /// <exception cref="System.InvalidOperationException">エンティティをビルドできる状態ではありません。</exception>
        TEntity Build();
    }
}
